package com.yhd.task.task;

import net.javacrumbs.shedlock.core.SchedulerLock;
import org.apache.catalina.core.ApplicationContext;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;

@Component
public class ScheduledTask {


    // 分，时，日，月，周，年
    //默认的 ConcurrentTaskScheduler 计划执行器采用Executors.newSingleThreadScheduledExecutor()
    // 实现单线程的执行器。因此，对同一个调度任务的执行总是同一个线程。
    // 如果任务的执行时间超过该任务的下一次执行时间，则会出现任务丢失，跳过该段时间的任务。
    // 上述问题有以下解决办法：
    //采用异步的方式执行调度任务，配置 Spring 的 @EnableAsync，
    // 在执行定时任务的方法上标注 @Async配置任务执行池，线程池大小 n 的数量为 单个任务执行所需时间 / 任务执行的间隔时间.
    @SchedulerLock(name = "yhd", lockAtLeastForString = "PT10S", lockAtMostForString = "PT1800S")
    @Scheduled(cron = "0/10 * * * * ? ")
    public void task1() {
        // 发送的消息
        System.out.println("server2");
        printTime();

    }



    private void printTime(){
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        System.out.println(formatter.format(calendar.getTime()));
    }
}


